package domein;

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map.Entry;

/**
 * ParkeerTerrein beheert de lijst met parkeerplaatsen
 * @author team4
 *
 */

public class ParkeerTerrein {
    private static HashMap<String, ParkeerPlaats> parkeerPlaatsen = new HashMap<String, ParkeerPlaats>();
	
	public ParkeerTerrein(){
	}
	
	/**
	 * Voegt een nieuwe parkeerplaats toe aan de lijst met parkeerplaatsen
	 * @param parkeerplaatsNaam naam van de parkeerplaats, bijv. 'A1'
	 * @param prijs prijs per uur
	 * @param aType type van de parkeerplaats
	 */
	public static void addParkeerPlaats(String parkeerplaatsNaam, double prijs, String aType){
		parkeerPlaatsen.put(parkeerplaatsNaam, new ParkeerPlaats(prijs,aType));
    }
	
	/**
	 * Zet nieuwe lijst met parkeerplaatsen
	 * @param pp HashMap lijst met alle parkeerplaatsen
	 */
	public static void setParkeerPlaatsen(HashMap<String, ParkeerPlaats> pp){
		parkeerPlaatsen = pp;
	}
	
	/**
	 * Verkrijg alleen de beschrikbare parkeerplaatsen
	 * @param filter om alleen parkeerplaatsen van dit type terug te geven. Null returns alle types
	 * @return HashMap met beschrikbare parkeerplaatsen
	 */
	public static HashMap<String, ParkeerPlaats> getBeschikbareParkeerplaatsen(String aFilter, Calendar startTijd, Calendar eindTijd){
		HashMap<String, ParkeerPlaats> beschikbarePlaatsen = new HashMap<String, ParkeerPlaats>();
		
        for (Entry<String, ParkeerPlaats> pp: parkeerPlaatsen.entrySet()){
            if (!pp.getValue().isBezet(startTijd, eindTijd)){ //is de parkeerplaats bezet?
            	if(aFilter == null || pp.getValue().getType().equals(aFilter)){ 
            		//als filter null is of filter equals type vul de parkeerplaats in de lijst
            		beschikbarePlaatsen.put(pp.getKey(),pp.getValue());
            	}
            }
        }
        return beschikbarePlaatsen;
    }
	
	public static HashMap<String, ParkeerPlaats> getReserveerdeParkeerplaatsen(){
		return getReserveerdeParkeerplaatsen(null);
    }
	
	/**
	 * Verkrijg lijst met bezette parkeerplaatsen
	 * @param filter om alleen parkeerplaatsen van dit type terug te geven. Null returns alle types
	 * @return HashMap met bezette parkeerplaatsen
	 */
	public static HashMap<String, ParkeerPlaats> getReserveerdeParkeerplaatsen(String aFilter){
		HashMap<String, ParkeerPlaats> bezettePlaatsen = new HashMap<String, ParkeerPlaats>();
        for (Entry<String, ParkeerPlaats> pp: parkeerPlaatsen.entrySet()){
            if (!pp.getValue().hasEmptyTimeTable()){
            	if(aFilter == null || pp.getValue().getType().equals(aFilter)){ 
            		bezettePlaatsen.put(pp.getKey(),pp.getValue());
            	}
            }
        }
        return bezettePlaatsen;
    }
	

    public static HashMap<String, ParkeerPlaats> getParkeerplaatsen(){
        return parkeerPlaatsen;
    }
    
    public static ParkeerPlaats getParkeerplaats(String parkeerplaatsNaam){    	
    	return parkeerPlaatsen.get(parkeerplaatsNaam);		
    }
}

